﻿// code02040300.cpp : const限定符
// 顶层const

#include <iostream>
using namespace std;

int main()
{
    int i = 0; //定义普通变量i
    int* const p1 = &i;//定义常量指针p1,指向i
    const int ci = 42;//定义常量ci
    const int* p2 = &ci;//定义指向常量的指针p2
    const int* const p3 = p2;//定义指向常量的常量指针p3,该指针同指针p2指向相同的变量ci

    i = ci;//常量ci拷贝复制给i
    p2 = p3;//指针p3内的地址拷贝赋值给p2,p2是指向常量的指针，所以p3指向的变量ci不会被p2修改的风险

    int* p = p3;//报错！指针内的地址拷贝赋值给普通指针p，p3指向的变量ci存在被p修改的风险
    p2 = &i;//改变指针p2内的地址，运行正常
    int& r = ci;//报错！常量无法被非常量引用
    const int& r2 = i;//变量的值拷贝给常量引用，运行正常

    return 0;


}
